package org.rency.mq.activemq.request;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

/**
 * 消息请求接口
 *
 * @author: Created by user_rcy@163.com on 2016/10/19.
 * @version: V1.0.0
 * @since JDK 1.8
 */
public interface MQRequest extends Serializable{

    int getActionId();

    void setActionId(int actionId);

    /**
     * 获取目的地名称
     * @return 目的地名称
     */
    String getDestination();

    /**
     * 设置目的地名称
     * @param destination 目的地名称
     */
    void setDestination(String destination);

    /**
     * 获取目的地类型
     * @return 目的地类型
     */
    int getDestinationType();

    /**
     * 设置目的地类型
     * @param destinationType 目的地类型
     */
    void setDestinationType(int destinationType);

    /**
     * 获取消息传输模式
     * @return 消息传输模式
     */
    int getDeliveryMode();

    /**
     * 设置消息传输模式
     * @param deliveryMode 消息传输模式
     * @see com.netfinworks.mq.constant.DeliveryMode
     */
    void setDeliveryMode(int deliveryMode);

    /**
     * 获取应答模式
     * @return 应答模式
     */
    int getAcknowledgeMode();

    /**
     * 设置应答模式
     * @param acknowledgeMode 应答模式
     */
    void setAcknowledgeMode(int acknowledgeMode);

    /**
     * 是否支持事务
     * @return
     */
    boolean isTransacted();

    /**
     * 设置是否支持事务
     * @param sessionTransacted
     */
    void setTransacted(boolean transacted);

    /**
     * 获取请求时间
     * @return
     */
    Date getRequestTime();

    /**
     * 设置请求时间
     * @param requestTime
     */
    void setRequestTime(Date requestTime);

    /**
     * 获取请求类型
     * @return
     */
    int getRequestType();

    /**
     * 设置请求类型
     * @param requestType
     */
    void setRequestType(int requestType);

    /**
     * 获取过期时间
     * @return
     */
    long getExpirationTime();

    /**
     * 设置过期时间
     * @param expirationTime
     */
    void setExpirationTime(long expirationTime);

    /**
     * 获取消息传输格式，默认为对象
     * @return
     */
    int getMessageFormat();

    /**
     * 设置消息传输格式
     * @param format
     */
    void setMessageFormat(int format);

    Map<String, Object> getProperties();

    void setProperties(Map<String, Object> properties);

    void addProperty(String key, Object value);

    Object getProperty(String key);

    boolean containsProperty(String string);

    MQRequest deepCopy();

}
